package com.gdust.hzx.manager.controller;

import com.gdust.hzx.manager.service.SysRoleService;
import com.gdust.spzx.common.log.annotation.Log;
import com.gdust.spzx.common.log.enums.OperatorType;
import com.gdust.hzx.model.dto.system.SysRoleDto;
import com.gdust.hzx.model.entity.system.SysRole;
import com.gdust.hzx.model.vo.common.Result;
import com.gdust.hzx.model.vo.common.ResultCodeEnum;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * ClassName: SysRoleController
 * Package: com.gdust.spzx.manager.controller
 * Description:角色控制类
 *
 * @Author syun
 * @Create 2024/11/6 20:38
 * @Version 1.0
 */
@RestController// @RestController: 专用于restful风格的注解 = @Controller (控制器) + @ResponseBody (方法返回值为json)
@RequestMapping(value = "/admin/system/sysRole")
public class SysRoleController {
    //注入角色表的service
    @Autowired
    private SysRoleService sysRoleService;

    /**
     * 查询角色列表的方法
     * @PostMapping：方法加上这个注解之后方法只能接受POST请求
     * @RequestBody: 接收请求的json格式数据 将json格式数据转化为对象 从响应体获取
     * @PathVariable 从路径中获取
     * @param sysRoleDto 条件角色名称对象 内含属性角色名称
     * @param current 当前页
     * @param limit 每页记录数
     * @return
     */
    @PostMapping("/findByPage/{current}/{limit}")
    public Result findByPage(@PathVariable("current") Integer current,
                             @PathVariable("limit") Integer limit,
                             @RequestBody SysRoleDto sysRoleDto){
        //pageHelper插件实现分页:传入条件角色名称对象、当前页和每页记录数
        PageInfo<SysRole> pageInfo = sysRoleService.findByPage(sysRoleDto, current, limit);
        return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
    }

    /**
     * 添加角色方法
     * 后端接收到数据后，将数据保存到数据库中即可，不要给前端返回业务数据，只需要返回对应的业务状态码即可。
     * @param sysRole 角色实体类传入参数
     * @return 响应结果实体类返回结果与业务状态码
     */
    @Log(title = "角色添加",businessType = 0) //添加Log注解，设置属性
    @PostMapping(value = "/saveSysRole")
    public Result saveSysRole(@RequestBody SysRole sysRole){
        //自定义方法添加角色
        sysRoleService.saveSysRole(sysRole);
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }

    /**
     * 修改角色方法
     * 后端接收到数据后，将数据保存到数据库中即可，不要给前端返回业务数据，只需要返回对应的业务状态码即可。
     *
     * 注：动态筛选条件：根据用户传入的查询条件（如roleName、roleCode、description）进行筛选，<if>标签根据条件的值是否存在来决定是否添加相应的 WHERE子句
     *
     * @param sysRole 角色实体类传入参数
     * @return 响应结果实体类返回结果与业务状态码
     */
    @Log(title = "修改角色",businessType = 2,operatorType = OperatorType.MANAGE)
    @PutMapping(value = "/updateSysRole")
    public Result updateSysRole(@RequestBody SysRole sysRole){
        //自定义方法修改角色
        sysRoleService.updateSysRole(sysRole);
        return Result.build(null,ResultCodeEnum.SUCCESS);
    }

    /**
     * 删除角色方法
     * 后端接收到数据后，将数据保存到数据库中即可，不要给前端返回业务数据，只需要返回对应的业务状态码即可。
     * @param roleId 传入角色id
     * @return 响应结果实体类返回结果与业务状态码
     */
    @Log(title = "角色删除",businessType = 3) //添加Log注解，设置属性
    @DeleteMapping(value = "/deleteById/{roleId}")
    public Result deleteById(@PathVariable(value = "roleId") Long roleId){
        //自定义方法删除角色
        sysRoleService.deleteById(roleId);
        return Result.build(null,ResultCodeEnum.SUCCESS);

    }

    /**
     * 查询所有角色(根据用户id查询所有角色)
     * @param userId 用户id
     * @return 响应结果实体类返回结果与业务状态码
     */
//    @Log(title = "查询所有角色",businessType = 0,operatorType = OperatorType.MANAGE)
    @GetMapping("/findAllRoles/{userId}")
    public Result findAllRoles(@PathVariable("userId") Long userId){
        //自定义方法：根据用户id查询所有角色
        Map<String,Object> map = sysRoleService.findAll(userId);
        return Result.build(map,ResultCodeEnum.SUCCESS);
    }



}
